package packaged.storage;

abstract class Storage {
    /**
     * 默认超时时间(秒)
     */
    private static int overtime = 600;

    /**
     * 获取默认超时时间
     * @return
     */
    int getOvertime() {
        return overtime;
    }

    /**
     * 在Storage中加数据（永久）
     * 不建议使用此方法，此方法为永久存储，在客户端退出时不会清理，会造成存储空间的浪费
     * 如需存入默认时间的数据，请使用set()方法
     *
     * @param key
     * @param val
     */
    @Deprecated
    abstract void add(String key, String val);

    /**
     * 在Storage中存入字符串（默认时长）
     *
     * @param key
     * @param val
     */
    abstract void set(String key, String val);

    /**
     * 在Storage中存入字符串（指定时长）
     *
     * @param key
     * @param val
     * @param overtime
     */
    abstract void set(String key, String val, String overtime);

    /**
     * 在Storage中存入字符串（指定时长）
     *
     * @param key
     * @param val
     * @param overtime
     */
    abstract void set(String key, String val, int overtime);

    /**
     * 在Storage读取已存储的字符串
     * @param key
     * @return
     */
    abstract String get(String key);

    /**
     * 在Storage读取已存储的字符串,如果字符串不存在则返回spare
     * @param key
     * @param spare
     * @return
     */
    abstract String get(String key, String spare);

    /**
     * 在Storage中删除元素
     * @param key
     */
    abstract void del(String key);

    /**
     * 在Storage中删除元素并返回值
     * @param key
     */
    abstract String pop(String key);

    /**
     * 重设Storage中的数据生命
     * @param key
     */
    abstract void exp(String key);

    /**
     * 重设Storage中的数据生命为overtime
     * @param key
     * @param overtime
     */
    abstract void exp(String key, String overtime);
    abstract void exp(String key, int overtime);
}
